A document containing colors to be reproduced, defined in terms of a uniform color space such as the CIELAB space, is typically sensed by an input scanner. The input scanner can be of the charge couple device (CCD) type which senses the colors of the actual document and divides the document into a number of discrete pixels, each of which is analyzed to determine its color content. The scanner then provides color information in terms of three primary colors (red, green and blue) which form color separation signals.
In an ideal situation if the color filter set used by the input scanner were perfect, it would be possible to use the input scanner's output to reproduce colors via an output device, such as a print engine. In practice, however, the typical input color scanner uses a non-color matching function color filter which introduces color interpretation errors into the system. If the color filter is not a color matching function of an average human observer, then large color errors can be associated with what the actual input color is (L.sub.a * a.sub.a * b.sub.a *) and what an observer perceives it is (L*' a*' b*'). As a result, it is necessary to correct the signals generated by the input scanner to account for the color interpretation errors produced by the color filter set.
Known methods for correcting the color interpretation errors make use of lookup tables which are loaded with the corrected color values corresponding to all the visually discernable combinations of the input color scanner's output signals. The output signal of the input color scanner address the lookup table which provides the correct or "true" color value, i.e., L.sub.t * a.sub.t * b.sub.t *. However, this type of system requires a tremendously large lookup table to store the wide range of colors which can be produced, e.g. on the order of 17 million possible color combinations. Such a large memory becomes prohibitively expensive.
Other attempts at reducing the size of the lookup tables have included loading the lookup table memory with corrected color values for only a fraction of the total number of input colors. Corrected color values for each point in the color space lying between those values stored in the lookup table memory are derived via an interpolation process. However, these systems are linearly designed such that each color value loaded into the table is evenly spaced within the color space. While this system is acceptable for color signals having a linear function mapping to the true color space, it results in only mediocre performance for a non-linear situation.
At the print engine end of the system, the output device, i.e. the print engine itself, only has the capability to print over a limited output color gamut. Therefore, it has been found necessary to map the requested input color from the input color gamut, e.g. L.sub.i * a.sub.i * b.sub.i *, to an output color which falls within the output color gamut, e.g. L.sub.o * a.sub.o * b.sub.o *, and is thus printable by the output device. This mapping is often accomplished through compression of the requested input color gamut. The compression is performed in a manner which attempts to achieve pleasing viewing results.
Prior methods for compressing the input color gamut to be compatible with the printer's output color gamut have traditionally been performed by the input scanner operator. Mathematical formulae for describing color gamuts and mapping from one to another are described in the paper "On the Rendition of Unprintable Colors", J. R. Gordon, et al., TAGA Proceedings 39: Pages 186-195 (1987).